package com.shujia.wyh.day02;

/*
    位运算符
    & | ^ ~
 */
public class WeiOptDemo1 {
    public static void main(String[] args) {
        int a = 3;
        int b = 4;

        System.out.println(a & b);
        System.out.println(a | b);
        System.out.println(a ^ b);
        System.out.println(~ b);
    }
}

/*
    计算机中所有的数据运算都是采用补码的形式进行的
    计算出3的二进制原码：00000000 00000000 00000000 00000011  --> 3的补码
    计算出4的二进制原码：00000000 00000000 00000000 00000100  --> 4的补码


    // & 有0则0
         00000000 00000000 00000000 00000011
       &
         00000000 00000000 00000000 00000100
      -----------------------------------------
         00000000 00000000 00000000 00000000    ---> 0


   // |  有1则1
         00000000 00000000 00000000 00000011
       |
         00000000 00000000 00000000 00000100
       ---------------------------------------
         00000000 00000000 00000000 00000111    ---> 7

   // ^ 相同则0，不同则1
         00000000 00000000 00000000 00000011
       ^
         00000000 00000000 00000000 00000100
       ---------------------------------------
         00000000 00000000 00000000 00000111     ---> 7


   // ~ 1变成0，0变成1

         00000000 00000000 00000000 00000100
        ~
        --------------------------------------
 补码：   11111111 11111111 11111111 11111011
 已知补码求原码：
 反码：   11111111 11111111 11111111 11111010
 原码：   10000000 00000000 00000000 00000101      ---> -5
  -----------------------------------------------

 */


